Ćwiczenie 9¶
Zbadaj skuteczność redukcji szumu typu „sól i pieprz” za pomocą
- liniowego filtra uśredniającego z kwadratową maską, rozpoczynając od maski rozmiaru 3 × 3.
- nieliniowego filtra medianowego
- filtrów minimum i maksimum.
import matplotlib.pyplot as plt
import tifffile as tiff
import skimage.morphology as morph
from skimage.filters import rank
# Załadowanie pliku .tiff
img_a = tiff.imread("src/cboard_pepper_only.tif")
img_b = tiff.imread("src/cboard_salt_only.tif")
img_c = tiff.imread("src/cboard_salt_pepper.tif")
Zadanie 1¶
Filtr uśredniający z kwadratową maską 3x3
def meanFilter(img):
plt.subplot(2,3,2)
mean_img = rank.mean(img,morph.footprint_rectangle(square_mask))
plt.imshow(mean_img)
plt.title("Filtr uśredniający")
Zadanie 2¶
Nieliniowy filtr medianowy
def mediFilter(img):
plt.subplot(2,3,3)
medi_img = rank.median(img,morph.footprint_rectangle(square_mask))
plt.imshow(medi_img)
plt.title("Filtr medianowy")
Zadanie 3¶
Filtry minimum i maximum
def minMaxFilter(img):
plt.subplot(2,3,4)
min_img = rank.minimum(img,morph.footprint_rectangle(square_mask))
plt.imshow(min_img)
plt.title("Filtr min")
plt.subplot(2,3,5)
max_img = rank.maximum(img,morph.footprint_rectangle(square_mask))
plt.imshow(max_img)
plt.title("Filtr maks")
plt.subplot(2,3,6)
minMax_img = rank.maximum(min_img,morph.footprint_rectangle(square_mask))
plt.imshow(minMax_img)
plt.title("Filtr min-maks")
def display(img):
plt.subplot(2,3,1)
plt.imshow(img)
plt.title("Obraz Orginalny")
meanFilter(img)
mediFilter(img)
minMaxFilter(img)
plt.tight_layout()
plt.show()
square_mask = (3, 3)
for i in range(3):
print("Obrazy wynikowwe dla maski {}x{}:".format(square_mask[0], square_mask[1]))
display(img_a) #pepper
display(img_b) #salt
display(img_c) #salt and pepper
square_mask = (square_mask[0] + 1, square_mask[1] + 1)
Obrazy wynikowwe dla maski 3x3:
Obrazy wynikowwe dla maski 4x4:
Obrazy wynikowwe dla maski 5x5:
W badaniach porównano skuteczność filtrów uśredniającego, medianowego, minimalnego, maksymalnego oraz min-maks na obrazach z szumem typu "pieprz", "sól" oraz "sól i pieprz" dla masek o rozmiarach od 3×3 do 5×5.
Zastosowane filtry i efekty
Filtr uśredniający (mean): Skutecznie wygładza szum, jednak powoduje rozmycie krawędzi i utratę szczegółów. Im większa maska, tym silniejsze rozmycie obrazu. Najlepiej sprawdza się przy słabym szumie, ale nie radzi sobie z pojedynczymi impulsami szumu typu "sól" lub "pieprz".
Filtr medianowy (median): Najlepiej usuwa szum impulsowy ("sól", "pieprz", "sól i pieprz"), zachowując przy tym ostrość krawędzi. Nawet przy większych maskach skutecznie eliminuje zakłócenia bez nadmiernego rozmycia obrazu. Jest rekomendowany do usuwania szumu impulsowego.
Filtr minimalny (min): Usuwa głównie szum typu "sól" (białe piksele), ale może prowadzić do przyciemnienia obrazu i utraty detali. Przy większych maskach efekt ciemnienia jest silniejszy.
Filtr maksymalny (max): Usuwa głównie szum typu "pieprz" (czarne piksele), ale może prowadzić do rozjaśnienia obrazu. Zwiększenie maski potęguje ten efekt.
Filtr min-maks: Kombinacja filtrów min i max pozwala na usunięcie obu typów szumu ("sól i pieprz"), jednak kosztem utraty kontrastu i szczegółów, zwłaszcza przy większych maskach.
Wnioski z badań dla masek 3×3, 4×4, 5×5
Maska 3×3: Najlepszy kompromis między usuwaniem szumu a zachowaniem szczegółów. Filtr medianowy skutecznie usuwa szum impulsowy, a efekt rozmycia jest minimalny.
Maska 4×4 i 5×5: Skuteczność usuwania szumu rośnie, ale jednocześnie rośnie rozmycie i utrata detali. Filtr medianowy nadal radzi sobie najlepiej, natomiast filtry uśredniający, min i max powodują coraz większą degradację jakości obrazu.